iT邦幫忙

2023 iThome 鐵人賽

DAY 13
0

什麼是陣列?

  1. 陣列是一種由相同型態的資料組成的資料結構。
  2. 陣列在記憶體中使用連續的記憶體空間,透過索引值(index)來做資料的存取。
  3. 陣列在Java裡是以物件(object)的方式存在,所以陣列本身是參考資料型態(reference type)。
  4. 陣列中的元素可以是基本資料型態(primitive type)也可以是參考資料型態(reference type)

宣告方式

必須先宣告陣列後配置記憶體位置給陣列。

資料型態 陣列名稱[];
陣列名稱=new 資料型態[數量];
int score[];   //宣告整數陣列score
score=new int[5]; //使陣列score 可存放5個整數的記憶體空間

也可以合併再一起

資料型態 陣列名稱[]=new 資料型態[數量];
int score[] = new int[3];

記憶體配置:

https://ithelp.ithome.com.tw/upload/images/20230927/20163139CyIObq5jaC.png

int score[ ]; 還有另外的宣告方式:


int[] score;//這種宣告方式較常見
int  []score;

定義陣列時不能指定陣列長度,因為宣告後,僅定義了一個參照變數,還未指向任何有效的記憶體,沒有記憶體來儲存陣列元素,這時候陣列也不可以使用,只有初始化後才可以使用。

初始化的方式有兩種:

  1. 靜態初始化:指定每個陣列元素的初始值,由系統決定陣列長度。
陣列名稱 = new 資料型態[]{元素1,元素2,元素3....};
  • 此處的資料類型要跟定義陣列變數時所使用的類型相同,或其子類別(之後會詳細說明)
  • 用大括號將所有陣列元素括起來且緊跟型態之後,多個陣列元素之間以英文逗號隔開
public class ArrayDemo01 {

	public static void main(String[] args) {
		
		//同類型不指定陣列長度
		int[] intArray = new int[]{10, 20, 30};
		//子類別
		Object[] objArr = new String[] {"小明", "小花"};
		
	}

}

也可以宣告和初始化同時完成如下:

資料型態[] 陣列名稱 = {元素1,元素2,元素3....};
int[] a ={ 5, 6, 7, 8};
  1. 動態初始化:只指定陣列長度,由系統為陣列元素分配初始值
陣列名稱 = new 資料型態[長度];

宣告和初始化同時完成,使用動態初始化語法

int[] prices = new int[5];

Object[] books = new String[4];

陣列被初始化後,每個元素都會被初始化為該型態的初始值(default value)。

注意 : 不要同時使用靜態初始化和動態初始化,也就是說不要同時指定長度,和分配的初始值

使用陣列

存取陣列

對陣列賦值,和取出陣列元素

透過陣列名稱,利用中括號『[ ]』,括號裡面放元素在陣列中的索引值(index)。

陣列索引值從0開始,只能為非負整數。

int[] intArray = new int[]{10, 20, 30};

System.out.println("intArray[0]: " + intArray[0]);

/*執行結果
    intArray[0]: 10
*/

如果存取元素指定的索引值小於0或是大於陣列長度,編譯程式不會出錯,但運行時會出現異常:

Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: N(試圖存取的索引)

int[] intArray = new int[]{10, 20, 30};
		
System.out.println("intArray[0]: " + intArray[5]);

/*執行結果
	Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 5
	at com.demo03.ArrayDemo01.main(ArrayDemo01.java:10)
*/

取得陣列長度 length


int[] intArray = new int[]{10, 20, 30};
		
System.out.println("陣列的長度: " + intArray.length);
/*執行結果
	陣列的長度: 3
*/

可以利用迴圈取出陣列的值

int[] intArray = new int[]{10, 20, 30};
		
for(int i = 0; i < intArray.length; i++ ) {
	System.out.println("陣列中的元素:" + intArray[i]);
}
/*執行結果
	陣列中的元素:10
	陣列中的元素:20
	陣列中的元素:30
*/

foreach 迴圈

for(資料類型 變數名稱 : 可迭代物件){

		迴圈體
}
int[] intArray = new int[]{10, 20, 30};
		
		for(int i = 0; i < intArray.length; i++ ) {
			System.out.println("陣列中的元素:" + intArray[i]);
		}
		//等同於
		for(int i : intArray) {
			
			System.out.println("陣列中的元素:" + i);
		}
/*執行結果
	陣列中的元素:10
	陣列中的元素:20
	陣列中的元素:30
*/

注意:使用foreach 迴圈迭代陣列元素時,不能改變陣列元素的值,因此不要對foreach的迴圈變數進行賦值

今天就先到這邊,明天繼續partII~~~


上一篇
Day 12 迴圈III
下一篇
Day 14 陣列(Array)II
系列文
玩轉Java:從基礎打造你的程式超能力30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言